Return to previous page

This file contains statistics and figures from the paper, “Molecular, Cellular, and Developmental Organization of the Mouse Vomeronasal organ at Single Cell Resolution” by Max Hills Jr., Limei Ma, Ai Fang, Thelma Chiremba, Seth Malloy, Allison Scott, Anoja Perera, and C. Ron Yu.

The paper can be found here:

Molecular, Cellular, and Developmental Organization of the Mouse Vomeronasal organ at Single Cell Resolution



Axon guidance molecules associated with receptor genes

Correlation heatmap between receptor types calculated from co-expressed AG and TF genes

3D Heatmap showing the Jaccard Indices between AG and TF genes for each of the VRs in the dataset

Interactive 3D Heatmap VR-AG-TF Jaccard Indices

Heatmaps showing Jaccard Indices of TF-AG associations for V1R and V2R types. The lists of TF and AG genes here are abridged from the full list to enhance visualization

Vmn1r185 - Vmn1r34 - Vmn1r69

Vmn1r56 - Vmn1r60 - Vmn1r61

Vmn2r1 - Vmn2r3 - Vmn2r7

Vmn2r8 - Vmn2r73 - Vmn2r88

Vmn2r91 - Vmn2r118

LS0tCnRpdGxlOiAiVk5PIEF0bGFzIEZpZ3VyZSA3IgphdXRob3I6ICJNYXggSGlsbHMiCmRhdGU6ICJgciBmb3JtYXQoU3lzLnRpbWUoKSwgJyVkICVCLCAlWScpYCIKb3V0cHV0OgogIGh0bWxfbm90ZWJvb2s6CiAgICBjc3M6IHN0eWxlLmNzcwotLS0KCioqUmV0dXJuIHRvIHByZXZpb3VzIHBhZ2UqKiAgCmBgYHtyLCByZXN1bHRzPSdhc2lzJ30KCmNhdCgiPGJ1dHRvbiBvbmNsaWNrPSdoaXN0b3J5LmJhY2soKSc+QmFjazwvYnV0dG9uPiIpCgpgYGAKCiAgCj5UaGlzIGZpbGUgY29udGFpbnMgc3RhdGlzdGljcyBhbmQgZmlndXJlcyBmcm9tIHRoZSBwYXBlciwgIk1vbGVjdWxhciwgQ2VsbHVsYXIsIGFuZCBEZXZlbG9wbWVudGFsIE9yZ2FuaXphdGlvbiBvZiB0aGUgTW91c2UgVm9tZXJvbmFzYWwgb3JnYW4gYXQgU2luZ2xlIENlbGwgUmVzb2x1dGlvbiIgYnkgTWF4IEhpbGxzIEpyLiwgTGltZWkgTWEsIEFpIEZhbmcsIFRoZWxtYSBDaGlyZW1iYSwgU2V0aCBNYWxsb3ksIEFsbGlzb24gU2NvdHQsIEFub2phIFBlcmVyYSwgYW5kIEMuIFJvbiBZdS4gICAgCgpUaGUgcGFwZXIgY2FuIGJlIGZvdW5kIGhlcmU6ICAKCltNb2xlY3VsYXIsIENlbGx1bGFyLCBhbmQgRGV2ZWxvcG1lbnRhbCBPcmdhbml6YXRpb24gb2YgdGhlIE1vdXNlIFZvbWVyb25hc2FsIG9yZ2FuIGF0IFNpbmdsZSBDZWxsIFJlc29sdXRpb25dKGh0dHBzOi8vZWxpZmVzY2llbmNlcy5vcmcvcmV2aWV3ZWQtcHJlcHJpbnRzLzk3MzU2I3RhYi1jb250ZW50KSAgCgoqKiogIAoKYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9CgojIFItTWFya2Rvd24gR2xvYmFsIFNldHRpbmdzICAKCiMgU2V0LXVwIGEgZGVmYXVsdCBpbWFnZSBzaXplIG9mIDEwIFggMTAgaW5jaGVzLiBTdXBwcmVzcyB3YXJuaW5nCiMgYW5kIGVycm9yIG1lc3NhZ2VzLiBIaWRlIGNvZGUuCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCBjb21tZW50PSIiLAogICAgICAgICAgICAgICAgICAgICAgZXJyb3I9RkFMU0UsIGZpZy53aWR0aD0xMiwgZmlnLmhlaWdodD0xMiwgY2FjaGU9RkFMU0UpCgpgYGAKCmBgYHtyIGxpYnJhcmllcywgaW5jbHVkZT1GQUxTRX0KCiMgTGlicmFyeSBMb2FkaW5nICAKCnN1cHByZXNzUGFja2FnZVN0YXJ0dXBNZXNzYWdlcyh7CiAgbGlicmFyeShraXQpOyBsaWJyYXJ5KHRpZHl2ZXJzZSk7IGxpYnJhcnkoc3RyaW5ncik7IGxpYnJhcnkocGxvdDNEKSAKICBsaWJyYXJ5KGdncGxvdDIpOyBsaWJyYXJ5KGRhdGEudGFibGUpOyBsaWJyYXJ5KG9yZy5NbS5lZy5kYikKICBsaWJyYXJ5KGRwbHlyKTsgbGlicmFyeShTZXVyYXQpOyBsaWJyYXJ5KERCSSk7IGxpYnJhcnkoY293cGxvdCkKICBsaWJyYXJ5KE1hdHJpeCk7IGxpYnJhcnkoZ2xtR2FtUG9pKTsgbGlicmFyeShjaXJjbGl6ZSkKICBsaWJyYXJ5KHRpYmJsZSk7IGxpYnJhcnkoZ2dwdWJyKTsgbGlicmFyeShzdmdsaXRlKTsgbGlicmFyeShnZ3NpZ25pZikKICBsaWJyYXJ5KHN0YXRzKTsgbGlicmFyeSh2ZWdhbik7IGxpYnJhcnkoc2NhbGVzKTsgbGlicmFyeShjYXJldCkKICBsaWJyYXJ5KHBhdGNod29yayk7IGxpYnJhcnkocGxvdGx5KTsgbGlicmFyeShnZW9tdGV4dHBhdGgpCiAgbGlicmFyeShvcGVueGxzeCk7IGxpYnJhcnkoZ3JpZEV4dHJhKTsgbGlicmFyeShnZ3JlcGVsKQogIGxpYnJhcnkoR2VuZU92ZXJsYXApOyBsaWJyYXJ5KGJpb21hUnQpOyBsaWJyYXJ5KGdncG9pbnRkZW5zaXR5KQogIGxpYnJhcnkoc2xpbmdzaG90KTsgbGlicmFyeSh0cmFkZVNlcSk7IGxpYnJhcnkoU2luZ2xlQ2VsbEV4cGVyaW1lbnQpCiAgbGlicmFyeSh2aXJpZGlzKTsgbGlicmFyeShVcFNldFIpOyBsaWJyYXJ5KHBoZWF0bWFwKTsgbGlicmFyeShtc2lnZGJyKQogIGxpYnJhcnkoZmdzZWEpOyBsaWJyYXJ5KGdyaWQpOyBsaWJyYXJ5KElEUG1pc2MpOyBsaWJyYXJ5KE1BU1MpCiAgbGlicmFyeShSbWlzYyk7IGxpYnJhcnkoZ2dwbG90aWZ5KTsgbGlicmFyeShnZ3BtaXNjKTsgbGlicmFyeShzY2FsZXMpCiAgbGlicmFyeShoZWF0bWFwbHkpOyBsaWJyYXJ5KGRlbmRleHRlbmQpCn0pCgpgYGAKCmBgYHtyfQoKIyBHbG9iYWwgVmFyaWFibGVzCgojIFRoZSBob21lIGRpcmVjdG9yeQpob21lX2RpciA8LSAiL2wvWXUvWXVMYWIvQmlvaW5mb3JtYXRpY3MvcHJvamVjdHMvbWhoL3NjX1ZOTy8iCiMgRGlyZWN0b3J5IGZvciBzdG9yaW5nIGRhdGEgb2JqZWN0cyBhdCBjcnVjaWFsIHN0YWdlcwpvYmplY3RfZGlyIDwtIHBhc3RlMChob21lX2RpciwiZmluYWwuc2V1Lm9ianMvIikKIyBEaXJlY3RvcnkgZm9yIGltYWdlcyBmcm9tIHRoZSBmaW5hbCBhbmFseXNpcwppbWFnZV9kaXIgPC0gcGFzdGUwKGhvbWVfZGlyLCJmaW5hbF9pbWFnZXMvIikKYWRvYmVfaW1hZ2VzIDwtIHBhc3RlMChpbWFnZV9kaXIsICJhZG9iZV9pbGx1c3RyYXRvcl9zdmdfZmlsZXMvIikKIyBEaXJlY3RvcnkgZm9yIGltYWdlcyBmb3IgdGhlIGZpbmFsIHBhcGVyCmNsdXN0cmVlX2RpciA8LSBwYXN0ZTAoaW1hZ2VfZGlyLCJjbHVzdHJlZS8iKQojIEEgZGlyZWN0b3J5IGZvciBUcmFkZVNlcSBmaXRHQU0gb3V0cHV0CmZpdEdBTV9kaXIgPC0gcGFzdGUwKG9iamVjdF9kaXIsICJmaXRHQU0vIikKbW9lX2RpciA8LSAiL2wvWXUvWXVMYWIvQmlvaW5mb3JtYXRpY3MvcHJvamVjdHMvbWhoL21vbG5nXzI0MDdfMjQ1My9SX29iai8iCgojIE9QRU4gYGBgdm5vLnNldS5pbnRlZ3JhdGVkYGBgCmxvYWQoZmlsZSA9IHBhc3RlMChvYmplY3RfZGlyLCJ2bm8uaW50ZWdyYXRlZC5wb3N0Q2VsbElEIikpCiNMb2FkIE5ldXJvbmFsIExpbmVhZ2UgU2V1cmF0IE9iamVjdCAgCmxvYWQoZmlsZSA9IHBhc3RlMChvYmplY3RfZGlyLCJuZXVyb24uaW50ZWdyYXRlZC5wb3N0Q2VsbElEIikpCgojIFJlbmFtZSB1bmtub3duX21WU04gdG8gc1ZTTgpsZXZlbHModm5vLnNldS5pbnRlZ3JhdGVkQGFjdGl2ZS5pZGVudClbbGV2ZWxzKHZuby5zZXUuaW50ZWdyYXRlZEBhY3RpdmUuaWRlbnQpPT0idW5rbm93bl9tVlNOIl0gPC0gInNWU04iCmxldmVscyhuZXVyb24uaW50ZWdyYXRlZEBhY3RpdmUuaWRlbnQpW2xldmVscyhuZXVyb24uaW50ZWdyYXRlZEBhY3RpdmUuaWRlbnQpPT0idW5rbm93bl9tVlNOIl0gPC0gInNWU04iCmxldmVscyh2bm8uc2V1LmludGVncmF0ZWQkY2VsbF90eXBlKVtsZXZlbHModm5vLnNldS5pbnRlZ3JhdGVkJGNlbGxfdHlwZSk9PSJ1bmtub3duX21WU04iXSA8LSAic1ZTTiIKbGV2ZWxzKG5ldXJvbi5pbnRlZ3JhdGVkJGNlbGxfdHlwZSlbbGV2ZWxzKG5ldXJvbi5pbnRlZ3JhdGVkJGNlbGxfdHlwZSk9PSJ1bmtub3duX21WU04iXSA8LSAic1ZTTiIKCiMgR2V0IGNvbG9yIHNjaGVtZSBmb3IgdGhlIHdob2xlIHZubyBkYXRhc2V0CnZuby5jZWxsX3R5cGUuY29sb3JzIDwtIGh1ZV9wYWwoKShsZW5ndGgobGV2ZWxzKHZuby5zZXUuaW50ZWdyYXRlZEBhY3RpdmUuaWRlbnQpKSkKbmFtZXModm5vLmNlbGxfdHlwZS5jb2xvcnMpIDwtIGxldmVscyh2bm8uc2V1LmludGVncmF0ZWRAYWN0aXZlLmlkZW50KQoKIyBLZWVwIG5ldXJvbiBkYXRhc2V0IGNvbG9yIHNjaGVtZSBjb25zaXN0ZW50IHdpdGggdGhlIHdob2xlIHZubyBjb2xvciBzY2hlbWUsIHdoZXJlIHBvc3NpYmxlICAKbmV1cm9uLmNlbGxfdHlwZS5jb2xvcnMgPC0gdm5vLmNlbGxfdHlwZS5jb2xvcnNbYygiVjFSX21WU04iLCJWMlJfbVZTTiIsIm1PU04iLCJzVlNOIiwiVjFSX2lWU04iLCJWMlJfaVZTTiIsIkdCQyIpXQpuZXVyb24uY2VsbF90eXBlLmNvbG9ycyA8LSBzZXROYW1lcyhjKG5ldXJvbi5jZWxsX3R5cGUuY29sb3JzLCIjMDBCMEY2IiwiIzk1OTBGRiIsIiNFNzZCRjMiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYyhuYW1lcyhuZXVyb24uY2VsbF90eXBlLmNvbG9ycyksImlPU04iLCJsYXRlX0lOUCIsImVhcmx5X0lOUCIpKQoKbWF0dXJlLm5ldXJvbnMgPC0gc3Vic2V0KG5ldXJvbi5pbnRlZ3JhdGVkLGlkZW50cz1jKCJWMVJfbVZTTiIsIlYyUl9tVlNOIiwibU9TTiIsInNWU04iKSkKbWF0dXJlLmNlbGxfdHlwZS5jb2xvcnMgPC0gbmV1cm9uLmNlbGxfdHlwZS5jb2xvcnNbYygiVjFSX21WU04iLCJWMlJfbVZTTiIsIm1PU04iLCJzVlNOIildCgpnbG9iYWwudmFycyA8LSBjKGxzKCksImdsb2JhbC52YXJzIikKCmBgYAoKKioqICAKCiMgQXhvbiBndWlkYW5jZSBtb2xlY3VsZXMgYXNzb2NpYXRlZCB3aXRoIHJlY2VwdG9yIGdlbmVzIHsudGFic2V0IC50YWJzZXQtcGlsbHN9ICAKCmBgYHtyfQoKIyBMb2FkIHRoZSBzaWduaWZpY2FudCBjby1leHByZXNzaW9uIGRhdGEgZnJhbWVzCnNpZy52ci5jb2V4cHJlc3Npb24gPC0gb3Blbnhsc3g6OnJlYWQueGxzeCh4bHN4RmlsZT1wYXN0ZTAob2JqZWN0X2Rpciwic2lnLm1WU04uY28ueGxzeCIpKQpyb3duYW1lcyhzaWcudnIuY29leHByZXNzaW9uKSA8LSBwYXN0ZShzaWcudnIuY29leHByZXNzaW9uJHNldEEsc2lnLnZyLmNvZXhwcmVzc2lvbiRzZXRCLHNlcD0iXyIpCnNpZy52ci5hZy5jb2V4cHJlc3Npb24gPC0gb3Blbnhsc3g6OnJlYWQueGxzeCh4bHN4RmlsZT1wYXN0ZTAob2JqZWN0X2Rpciwic2lnLnZyLmFnLmNvZXhwcmVzc2lvbi54bHN4IikpCnJvd25hbWVzKHNpZy52ci5hZy5jb2V4cHJlc3Npb24pIDwtIHBhc3RlKHNpZy52ci5hZy5jb2V4cHJlc3Npb24kc2V0QSxzaWcudnIuYWcuY29leHByZXNzaW9uJHNldEIsc2VwPSJfIikKc2lnLnZyLnRmLmNvZXhwcmVzc2lvbiA8LSBvcGVueGxzeDo6cmVhZC54bHN4KHhsc3hGaWxlPXBhc3RlMChvYmplY3RfZGlyLCJzaWcudnIudGYuY29leHByZXNzaW9uLnhsc3giKSkKcm93bmFtZXMoc2lnLnZyLnRmLmNvZXhwcmVzc2lvbikgPC0gcGFzdGUoc2lnLnZyLnRmLmNvZXhwcmVzc2lvbiRzZXRBLHNpZy52ci50Zi5jb2V4cHJlc3Npb24kc2V0QixzZXA9Il8iKQp2ci5hZ190Zi5yZXN1bHRzIDwtIG9wZW54bHN4OjpyZWFkLnhsc3goeGxzeEZpbGU9cGFzdGUwKG9iamVjdF9kaXIsInZyLmFnX3RmLnJlc3VsdHMueGxzeCIpKQpyb3duYW1lcyh2ci5hZ190Zi5yZXN1bHRzKSA8LSBwYXN0ZSh2ci5hZ190Zi5yZXN1bHRzJHNldEEsdnIuYWdfdGYucmVzdWx0cyRzZXRCLHNlcD0iXyIpCgojIExvYWQgdGhlIGdlbmUgbmFtZXMgZm9yIGVhY2ggY2F0ZWdvcnkKdnIubmFtZXMgPC0gcmVhZFJEUyhmaWxlPXBhc3RlMChvYmplY3RfZGlyLCJmaW5hbC5yZWNlcHRvci5uYW1lcy5yZHMiKSkKYWcubmFtZXMgPC0gcmVhZFJEUyhmaWxlPXBhc3RlMChvYmplY3RfZGlyLCJmaW5hbC5tZW1icmFuZV9hZy5uYW1lcy5yZHMiKSkKdGYubmFtZXMgPC0gcmVhZFJEUyhmaWxlPXBhc3RlMChvYmplY3RfZGlyLCJmaW5hbC5kbmFfYmluZGluZ190Zi5uYW1lcy5yZHMiKSkKCmBgYAoKYGBge3J9CgpWUnMgPC0gdW5pcXVlKHNvcnQodnIuYWdfdGYucmVzdWx0cyRWUikpCkFHcyA8LSB1bmlxdWUoc29ydCh2ci5hZ190Zi5yZXN1bHRzJEFHKSkKVEZzIDwtIHVuaXF1ZShzb3J0KHZyLmFnX3RmLnJlc3VsdHMkVEYpKQoKYGBgCgpgYGB7cn0KCiMgQ3JlYXRlIGEgbGlzdCBvZiBtYXRyaWNlcyB3aXRoIHRoZSBKYWNjYXJkIEluZGV4IGZvciBBRy1URiBjby1leHByZXNzaW9uLCBmb3IgZWFjaCBWUgp2bm8ubWF0Lmxpc3QgPC0gbGFwcGx5KFZScywgZnVuY3Rpb24odnIpeyAgICAjIExvb3AgdGhyb3VnaCB1bmlxdWUgVlJzCiAgIyBDcmVhdGUgYW4gZW1wdHkgbWF0cml4IGZvciB0aGlzIFZSIHdpdGggQUdzIG9uIGNvbHVtbnMgYW5kIFRGcyBvbiByb3dzCiAgZW1wdHlfbWF0IDwtIG1hdHJpeChkYXRhPTAsbmNvbD1sZW5ndGgoQUdzKSxucm93PWxlbmd0aChURnMpKQogIHJvd25hbWVzKGVtcHR5X21hdCkgPC0gVEZzCiAgY29sbmFtZXMoZW1wdHlfbWF0KSA8LSBBR3MKICAjIFN1YnNldCBvdXIgcmVzdWx0cyBmb3Igcm93cyB0aGF0IGNvbnRhaW4gdGhpcyBWUgogIHN1Yi5kZiA8LSB2ci5hZ190Zi5yZXN1bHRzW3ZyLmFnX3RmLnJlc3VsdHMkVlI9PXZyLCBdCiAgIyBGb3Igb3VyIHJlc3VsdHMgZGF0YSBmcmFtZSwgaXRlcmF0ZSBvdmVyIHJvd3MKICBmb3IoaSBpbiAxOm5yb3coc3ViLmRmKSl7CiAgICAjIFRoZSBBRyBmb3IgdGhpcyByb3cKICAgIGFnLm5hbWUgPC0gc3ViLmRmW2ksIF0kQUcKICAgICMgVGhlIFRGIGZvciB0aGlzIHJvdwogICAgdGYubmFtZSA8LSBzdWIuZGZbaSwgXSRURgogICAgIyBUaGUgSmFjY2FyZCBJbmRleCBmb3IgdGhpcyBBRyBhbmQgdGhpcyBURiBmb3IgdGhpcyBWUgogICAgZW1wdHlfbWF0W3RmLm5hbWUsYWcubmFtZV0gPC0gc3ViLmRmW2ksIF0kamFjY2FyZC5pbmRleAogIH0KICByZXR1cm4oZW1wdHlfbWF0KSAgICAjIFJldHVybiB0aGUgbWF0cml4IGZvciB0aGlzIFZSCn0pCiMgTmFtZSBtYXRyaWNlcyBmb3IgdGhlaXIgVlIKbmFtZXModm5vLm1hdC5saXN0KSA8LSBWUnMKCmBgYAoKYGBge3J9CgojIENvbnZlcnQgYWxsIG1hdHJpY2VzIHRvIHZlY3RvcnMgYW5kIGNoZWNrIHRoZWlyIHBlYXJzb24gY29ycmVsYXRpb24Kdm5vLnZlYy5tYXQgPC0gc2FwcGx5KHZuby5tYXQubGlzdCwgYXMudmVjdG9yKQp2bm8uY29yLm1hdCA8LSBjb3Iodm5vLnZlYy5tYXQpCgpgYGAKCmBgYHtyfQoKZmlnN19hLmNvbG9ycyA8LSB3ZXNhbmRlcnNvbjo6d2VzX3BhbGV0dGUoIkRhcmplZWxpbmcxIikKIyBDcmVhdGUgYSByb3cgYW5ub3RhdGlvbiBkYXRhIGZyYW1lIGZvciBmaWd1cmUgN0EKZmlnN19hLnJvd19hbm5vdGF0aW9ucyA8LSBzYXBwbHkocm93bmFtZXModm5vLmNvci5tYXQpLCBmdW5jdGlvbihyZWMpewogIGlmKHN0YXJ0c1dpdGgoeD1yZWMscHJlZml4PSJGcHIiKSl7CiAgICByZXR1cm4oIkZwciIpCiAgfSBlbHNlIGlmKHN0YXJ0c1dpdGgoeD1yZWMscHJlZml4PSJPbGZyIikpewogICAgcmV0dXJuKCJPbGZyIikKICB9IGVsc2UgaWYoc3RhcnRzV2l0aCh4PXJlYyxwcmVmaXg9IlZtbjFyIikpewogICAgcmV0dXJuKCJWMVIiKQogIH0gZWxzZSBpZihzdGFydHNXaXRoKHg9cmVjLHByZWZpeD0iVm1uMnIiKSl7CiAgICByZXR1cm4oIlYyUiIpCiAgfQp9KQoKZmlnN19hLnJvd19hbm5vdGF0aW9ucyA8LSBhcy5kYXRhLmZyYW1lKGZpZzdfYS5yb3dfYW5ub3RhdGlvbnMpCmNvbG5hbWVzKGZpZzdfYS5yb3dfYW5ub3RhdGlvbnMpIDwtICJ0eXBlIgoKZmlnN19hLmFubl9jb2xvcnMgPC0gbGlzdCh0eXBlPWMoRnByPWZpZzdfYS5jb2xvcnNbNV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9sZnI9ZmlnN19hLmNvbG9yc1syXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVjFSPWZpZzdfYS5jb2xvcnNbM10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFYyUj1maWc3X2EuY29sb3JzWzRdKSkKCmBgYAoKIyMgQ29ycmVsYXRpb24gaGVhdG1hcCBiZXR3ZWVuIHJlY2VwdG9yIHR5cGVzIGNhbGN1bGF0ZWQgZnJvbSBjby1leHByZXNzZWQgQUcgYW5kIFRGIGdlbmVzICAKCmBgYHtyLGZpZy53aWR0aD0xNixmaWcuaGVpZ2h0PTE2fQoKIyBQbG90IHRoZSBjcm9zcyBWUi1zcGVjaWZpYyBjb3JyZWxhdGlvbiBvZiBBR3hURiBjby1leHByZXNzaW9uCmZpZzdfYSA8LQogIHBoZWF0bWFwKHZuby5jb3IubWF0LGZvbnRzaXplPTYsYW5ub3RhdGlvbl9yb3c9ZmlnN19hLnJvd19hbm5vdGF0aW9ucywgCiAgICAgICAgICAgc2hvd19yb3duYW1lcz1UUlVFLHNob3dfY29sbmFtZXM9VFJVRSxhbm5vdGF0aW9uX2NvbG9ycz1maWc3X2EuYW5uX2NvbG9ycykKCmBgYAoKIyMgM0QgSGVhdG1hcCBzaG93aW5nIHRoZSBKYWNjYXJkIEluZGljZXMgYmV0d2VlbiBBRyBhbmQgVEYgZ2VuZXMgZm9yIGVhY2ggb2YgdGhlIFZScyBpbiB0aGUgZGF0YXNldCAgCgpgYGB7cn0KCnZyLm9yZGVyLjNkIDwtIHJlYWRSRFMoZmlsZT1wYXN0ZTAob2JqZWN0X2RpciwidnIub3JkZXIuM2QucmRzIikpCmFnLm9yZGVyLjNkIDwtIHJlYWRSRFMoZmlsZT1wYXN0ZTAob2JqZWN0X2RpciwiYWcub3JkZXIuM2QucmRzIikpCnRmLm9yZGVyLjNkIDwtIHJlYWRSRFMoZmlsZT1wYXN0ZTAob2JqZWN0X2RpciwidGYub3JkZXIuM2QucmRzIikpCgpgYGAKCmBgYHtyfQoKIyBNaW1pYyB0aGUgY29sb3Igc2NoZW1lIG9mIHBoZWF0bWFwCmZpZzdfcGFsZXR0ZSA8LSBjb2xvclJhbXBQYWxldHRlKHJldihSQ29sb3JCcmV3ZXI6OmJyZXdlci5wYWwobj03LCBuYW1lPSJSZFlsQnUiKSkpKDEwMCkKIyBTdWJzZXQgb3VyIHJlc3VsdHMgZGF0YSBmcmFtZQpmaWc3X2Iuc2NhdHRlci5kZiA8LSB2ci5hZ190Zi5yZXN1bHRzWyAsYygiVlIiLCJBRyIsIlRGIiwiamFjY2FyZC5pbmRleCIpXQoKYGBgCgpgYGB7ciwgZmlnLndpZHRoPTE2LCBmaWcuaGVpZ2h0PTE2fQoKIyBDb252ZXJ0IGNhdGVnb3JpY2FsIHZhcmlhYmxlcyB0byBmYWN0b3JzCmZpZzdfYi5zY2F0dGVyLmRmJEFHIDwtIGZhY3RvcihmaWc3X2Iuc2NhdHRlci5kZiRBRywgbGV2ZWxzID0gcmV2KGFnLm9yZGVyLjNkKSkKZmlnN19iLnNjYXR0ZXIuZGYkVEYgPC0gZmFjdG9yKGZpZzdfYi5zY2F0dGVyLmRmJFRGLCBsZXZlbHMgPSByZXYodGYub3JkZXIuM2QpKQpmaWc3X2Iuc2NhdHRlci5kZiRWUiA8LSBmYWN0b3IoZmlnN19iLnNjYXR0ZXIuZGYkVlIsIGxldmVscyA9IHJldih2ci5vcmRlci4zZCkpCgojIENvbnZlcnQgZmFjdG9ycyB0byB1bmRlcmx5aW5nIG51bWVyaWMgcmVwcmVzZW50YXRpb24KZmlnN19iLnNjYXR0ZXIuZGYkQUdfbnVtZXJpYyA8LSBhcy5udW1lcmljKGZpZzdfYi5zY2F0dGVyLmRmJEFHKQpmaWc3X2Iuc2NhdHRlci5kZiRURl9udW1lcmljIDwtIGFzLm51bWVyaWMoZmlnN19iLnNjYXR0ZXIuZGYkVEYpCmZpZzdfYi5zY2F0dGVyLmRmJFZSX251bWVyaWMgPC0gYXMubnVtZXJpYyhmaWc3X2Iuc2NhdHRlci5kZiRWUikKCiMgUGxvdHRpbmcgdGhlIDNEIHNjYXR0ZXJwbG90CnNjYXR0ZXIzRCgKICB4ID0gZmlnN19iLnNjYXR0ZXIuZGYkQUdfbnVtZXJpYywKICB5ID0gZmlnN19iLnNjYXR0ZXIuZGYkVEZfbnVtZXJpYywKICB6ID0gZmlnN19iLnNjYXR0ZXIuZGYkVlJfbnVtZXJpYywKICBjb2x2YXIgPSBmaWc3X2Iuc2NhdHRlci5kZiRqYWNjYXJkLmluZGV4LCAgIyBDb2xvciBieSBqYWNjYXJkLmluZGV4CiAgY29sPWZpZzdfcGFsZXR0ZSwKICBwY2ggPSAxOSwgICMgUG9pbnQgc2hhcGUKICB0aGV0YSA9IDQ1LCBwaGkgPSAzMCwgICMgVmlld2luZyBhbmdsZQogIHhsYWIgPSAiQUciLCB5bGFiID0gIlRGIiwgemxhYiA9ICJWUiIsICAjIEF4aXMgbGFiZWxzCiAgY2xhYiA9ICJKYWNjYXJkIEluZGV4IiwKICBjZXggPSAwLjI1ICAgICMgU2hyaW5rIHRoZSBzaXplIG9mIHRoZSBkYXRhIHBvaW50cwopCgpgYGAKCiMjIEludGVyYWN0aXZlIDNEIEhlYXRtYXAgVlItQUctVEYgSmFjY2FyZCBJbmRpY2VzICAKCmBgYHtyfQoKcGFsZXR0ZSA8LSBjb2xvclJhbXBQYWxldHRlKHdlc2FuZGVyc29uOjp3ZXNfcGFsZXR0ZSgiWmlzc291MSIpKQoKc2NhdHRlcjNkLmNvbG9ycyA8LSBwYWxldHRlKG49MTAwKQoKYGBgCgoKYGBge3J9CgpwbG90bHkuc2NhdHRlci5kZiA8LSB2ci5hZ190Zi5yZXN1bHRzWyAsYygiVlIiLCJBRyIsIlRGIiwiamFjY2FyZC5pbmRleCIpXQoKdnIuYWcudGYuc2NhdHRlcjNkIDwtIHBsb3RfbHkoZGF0YSA9IHBsb3RseS5zY2F0dGVyLmRmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ID0gflRGLCB5ID0gfkFHLCB6ID0gflZSLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvciA9IH5qYWNjYXJkLmluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlID0gInNjYXR0ZXIzZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGUgPSAibWFya2VycyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9ycyA9IHNjYXR0ZXIzZC5jb2xvcnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtlciA9IGxpc3Qoc2l6ZSA9IDEsIHdpZHRoPTEpLCAjIGNvbnRyb2xzIHNpemUgb2YgcG9pbnRzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvdmVyaW5mbz0iYWxsIikgJT4lIGxheW91dCh0aXRsZT0iVlItQUctVEYgQ28tZXhwcmVzc2lvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2VuZT1saXN0KHhheGlzPWxpc3QodGl0bGU9J1RGJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRlZ29yeW9yZGVyPSJhcnJheSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcnlhcnJheT10Zi5vcmRlci4zZCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlheGlzPWxpc3QodGl0bGU9J0FHJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRlZ29yeW9yZGVyPSJhcnJheSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcnlhcnJheT1hZy5vcmRlci4zZCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpheGlzPWxpc3QodGl0bGU9J1ZSJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRlZ29yeW9yZGVyPSJhcnJheSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcnlhcnJheT12ci5vcmRlci4zZCkpKQoKYGBgCgpgYGB7ciwgZmlnLndpZHRoPTE2LCBmaWcuaGVpZ2h0PTE2fQoKdnIuYWcudGYuc2NhdHRlcjNkCgpgYGAKCiMjIEhlYXRtYXBzIHNob3dpbmcgSmFjY2FyZCBJbmRpY2VzIG9mIFRGLUFHIGFzc29jaWF0aW9ucyBmb3IgVjFSIGFuZCBWMlIgdHlwZXMuIFRoZSBsaXN0cyBvZiBURiBhbmQgQUcgZ2VuZXMgaGVyZSBhcmUgYWJyaWRnZWQgZnJvbSB0aGUgZnVsbCBsaXN0IHRvIGVuaGFuY2UgdmlzdWFsaXphdGlvbiB7LnRhYnNldCAudGFic2V0LXBpbGxzfSAgCgpgYGB7cn0KCnZyLmdvaSA8LSBjKCJWbW4xcjY5IiwiVm1uMXIxODUiLCJWbW4xcjM0IiwiVm1uMXI1NiIsIlZtbjFyNjAiLCJWbW4xcjYxIiwiVm1uMnIxIiwKICAgICAgICAgIlZtbjJyMyIsIlZtbjJyNyIsIlZtbjJyNzMiLCJWbW4ycjg4IiwiVm1uMnI4IiwiVm1uMnI5MSIsIlZtbjJyMTE4IikKCmFnLmdvaSA8LSBjKCJGbG90MSIsIkxncjQiLCJQY2RoOSIsIktpcnJlbDIiLCJDZGs1cjIiLCJOY2FtMSIsIkVmbmE1IiwiTnJwMiIsIkIzZ250MiIsIlBjZGgxMCIsCiAgICAgICAgICAgICJFcGhhNSIsIlJvYm8yIiwiUGNkaDE3IiwiVGVubTIiLCJHYXA0MyIsIktpcnJlbDMiLCJQbHhuZDEiLCJBcHAiLCJCc2ciLCJFZm5hMyIpCgp0Zi5nb2kgPC0gYygiVHJwczEiLCJQYngyIiwiTWVpczIiLCJOZml4IiwiVGZhcDJlIiwiUG91MmYxIiwiQmF0ZjMiLCJUY2Y0IiwiU3A4IiwiQ2VicGIiLAogICAgICAgICAgICAiTmhsaDEiLCJGb3hnMSIsIkZveHAxIiwiQXRmNSIsIkp1bmQiLCJFYmYyIiwiRWJmMyIsIktsZjciLCJFbXgyIiwiSWt6ZjQiKQoKZmlsdGVyZWQudnIuYWdfdGYucmVzdWx0cyA8LSB2ci5hZ190Zi5yZXN1bHRzW3ZyLmFnX3RmLnJlc3VsdHMkVlIgJWluJSB2ci5nb2kgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ci5hZ190Zi5yZXN1bHRzJEFHICVpbiUgYWcuZ29pICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnIuYWdfdGYucmVzdWx0cyRURiAlaW4lIHRmLmdvaSwgXQoKYGBgCgpgYGB7cn0KCnZyLm9yZGVyLjNkLmZpbHRlcmVkIDwtIHZyLm9yZGVyLjNkW3ZyLm9yZGVyLjNkICVpbiUgdnIuZ29pXQphZy5vcmRlci4zZC5maWx0ZXJlZCA8LSBhZy5vcmRlci4zZFthZy5vcmRlci4zZCAlaW4lIGFnLmdvaV0KdGYub3JkZXIuM2QuZmlsdGVyZWQgPC0gdGYub3JkZXIuM2RbdGYub3JkZXIuM2QgJWluJSB0Zi5nb2ldCgpgYGAKCmBgYHtyfQoKZmlsdGVyZWQudm5vLm1hdC5saXN0IDwtIGxhcHBseSh2ci5vcmRlci4zZC5maWx0ZXJlZCwgZnVuY3Rpb24odnIpewogIGVtcHR5X21hdCA8LSBtYXRyaXgoZGF0YT0wLG5jb2w9bGVuZ3RoKGFnLm9yZGVyLjNkLmZpbHRlcmVkKSxucm93PWxlbmd0aCh0Zi5vcmRlci4zZC5maWx0ZXJlZCkpCiAgcm93bmFtZXMoZW1wdHlfbWF0KSA8LSB0Zi5vcmRlci4zZC5maWx0ZXJlZAogIGNvbG5hbWVzKGVtcHR5X21hdCkgPC0gYWcub3JkZXIuM2QuZmlsdGVyZWQKICBzdWIuZGYgPC0gZmlsdGVyZWQudnIuYWdfdGYucmVzdWx0c1tmaWx0ZXJlZC52ci5hZ190Zi5yZXN1bHRzJFZSPT12ciwgXQogIGZvcihpIGluIDE6bnJvdyhzdWIuZGYpKXsKICAgIGFnLm5hbWUgPC0gc3ViLmRmW2ksIF0kQUcKICAgIHRmLm5hbWUgPC0gc3ViLmRmW2ksIF0kVEYKICAgIGVtcHR5X21hdFt0Zi5uYW1lLGFnLm5hbWVdIDwtIHN1Yi5kZltpLCBdJGphY2NhcmQuaW5kZXgKICB9CiAgcmV0dXJuKGVtcHR5X21hdCkKfSkKbmFtZXMoZmlsdGVyZWQudm5vLm1hdC5saXN0KSA8LSB2ci5vcmRlci4zZC5maWx0ZXJlZAoKYGBgCgpgYGB7cn0KCiMgUmUtb3JkZXIgdGhlIG1hdHJpY2VzIGJ5IG91ciBuZXcgYWcgYW5kIHRmIG9yZGVycwpmaWx0ZXJlZC52bm8ubWF0Lmxpc3QgPC0gbGFwcGx5KGZpbHRlcmVkLnZuby5tYXQubGlzdCwgZnVuY3Rpb24obWF0KXsKICBtYXQgPC0gbWF0W3RmLm9yZGVyLjNkLmZpbHRlcmVkLGFnLm9yZGVyLjNkLmZpbHRlcmVkXQogIHJldHVybihtYXQpCn0pCgpgYGAKCiMjIyBWbW4xcjE4NSAtIFZtbjFyMzQgLSBWbW4xcjY5ICAKCmBgYHtyLGZpZy53aWR0aD0xNixmaWcuaGVpZ2h0PTUuMzMzMzN9CgojIENvcnJlbGF0ZWQgVjFScyAoVGhlbG1hKQpWbW4xcjE4NSA8LSBwaGVhdG1hcChmaWx0ZXJlZC52bm8ubWF0Lmxpc3QkVm1uMXIxODUsIGZvbnRzaXplID0gMTQsIGNsdXN0ZXJfY29scyA9IEZBTFNFLCAKICAgICAgICAgICAgICAgICAgICAgY2x1c3Rlcl9yb3dzID0gRkFMU0UsIG1haW49IlZtbjFyMTg1Iiwgc2hvd19yb3duYW1lcyA9IEZBTFNFLCBzaWxlbnQ9VFJVRSkKVm1uMXIzNCA8LSBwaGVhdG1hcChmaWx0ZXJlZC52bm8ubWF0Lmxpc3QkVm1uMXIzNCwgZm9udHNpemUgPSAxNCwgY2x1c3Rlcl9jb2xzID0gRkFMU0UsIAogICAgICAgICAgICAgICAgICAgIGNsdXN0ZXJfcm93cyA9IEZBTFNFLCBtYWluPSJWbW4xcjM0Iiwgc2hvd19yb3duYW1lcyA9IEZBTFNFLCBzaWxlbnQ9VFJVRSkKVm1uMXI2OSA8LSBwaGVhdG1hcChmaWx0ZXJlZC52bm8ubWF0Lmxpc3QkVm1uMXI2OSwgZm9udHNpemUgPSAxNCwgY2x1c3Rlcl9jb2xzID0gRkFMU0UsIAogICAgICAgICAgICAgICAgICAgIGNsdXN0ZXJfcm93cyA9IEZBTFNFLCBtYWluPSJWbW4xcjY5Iiwgc2lsZW50PVRSVUUpCgpncmlkLmFycmFuZ2UoVm1uMXIxODVbWzRdXSwgVm1uMXIzNFtbNF1dLCBWbW4xcjY5W1s0XV0sIG5jb2wgPSAzLCB3aWR0aHM9YygxLDEsMS4xNCkpCgpgYGAKCiMjIyBWbW4xcjU2IC0gVm1uMXI2MCAtIFZtbjFyNjEgIAoKYGBge3IsZmlnLndpZHRoPTE2LGZpZy5oZWlnaHQ9NS4zMzMzM30KClZtbjFyNTYgPC0gcGhlYXRtYXAoZmlsdGVyZWQudm5vLm1hdC5saXN0JFZtbjFyNTYsIGZvbnRzaXplID0gMTYsIGNsdXN0ZXJfY29scyA9IEZBTFNFLCAKICAgICAgICAgICAgICAgICAgICAgY2x1c3Rlcl9yb3dzID0gRkFMU0UsIG1haW49IlZtbjFyNTYiLCBzaG93X3Jvd25hbWVzID0gRkFMU0UsIHNpbGVudD1UUlVFKQpWbW4xcjYwIDwtIHBoZWF0bWFwKGZpbHRlcmVkLnZuby5tYXQubGlzdCRWbW4xcjYwLCBmb250c2l6ZSA9IDE2LCBjbHVzdGVyX2NvbHMgPSBGQUxTRSwgCiAgICAgICAgICAgICAgICAgICAgY2x1c3Rlcl9yb3dzID0gRkFMU0UsIG1haW49IlZtbjFyNjAiLCBzaG93X3Jvd25hbWVzID0gRkFMU0UsIHNpbGVudD1UUlVFKQpWbW4xcjYxIDwtIHBoZWF0bWFwKGZpbHRlcmVkLnZuby5tYXQubGlzdCRWbW4xcjYxLCBmb250c2l6ZSA9IDE2LCBjbHVzdGVyX2NvbHMgPSBGQUxTRSwgCiAgICAgICAgICAgICAgICAgICAgY2x1c3Rlcl9yb3dzID0gRkFMU0UsIG1haW49IlZtbjFyNjEiLCBzaWxlbnQ9VFJVRSkKCgojc3ZnbGl0ZShmaWxlbmFtZSA9IHBhc3RlMChpbWFnZV9kaXIsImZpZzdfZC5zdmciKSx3aWR0aD0yNCxoZWlnaHQ9OCkKZ3JpZC5hcnJhbmdlKFZtbjFyNTZbWzRdXSwgVm1uMXI2MFtbNF1dLCBWbW4xcjYxW1s0XV0sIG5jb2wgPSAzLCB3aWR0aHM9YygxLDEsMS4xNCkpCiNpbnZpc2libGUoZGV2Lm9mZigpKQoKYGBgCgojIyMgVm1uMnIxIC0gVm1uMnIzIC0gVm1uMnI3ICAKCmBgYHtyLGZpZy53aWR0aD0xNixmaWcuaGVpZ2h0PTUuMzMzMzN9CgpWbW4ycjEgPC0gcGhlYXRtYXAoZmlsdGVyZWQudm5vLm1hdC5saXN0JFZtbjJyMSwgZm9udHNpemUgPSAxNiwgY2x1c3Rlcl9jb2xzID0gRkFMU0UsIAogICAgICAgICAgICAgICAgICAgICBjbHVzdGVyX3Jvd3MgPSBGQUxTRSwgbWFpbj0iVm1uMnIxIiwgc2hvd19yb3duYW1lcyA9IEZBTFNFLCBzaWxlbnQ9VFJVRSkKVm1uMnIzIDwtIHBoZWF0bWFwKGZpbHRlcmVkLnZuby5tYXQubGlzdCRWbW4ycjMsIGZvbnRzaXplID0gMTYsIGNsdXN0ZXJfY29scyA9IEZBTFNFLCAKICAgICAgICAgICAgICAgICAgICBjbHVzdGVyX3Jvd3MgPSBGQUxTRSwgbWFpbj0iVm1uMnIzIiwgc2hvd19yb3duYW1lcyA9IEZBTFNFLCBzaWxlbnQ9VFJVRSkKVm1uMnI3IDwtIHBoZWF0bWFwKGZpbHRlcmVkLnZuby5tYXQubGlzdCRWbW4ycjcsIGZvbnRzaXplID0gMTYsIGNsdXN0ZXJfY29scyA9IEZBTFNFLCAKICAgICAgICAgICAgICAgICAgICBjbHVzdGVyX3Jvd3MgPSBGQUxTRSwgbWFpbj0iVm1uMnI3Iiwgc2lsZW50PVRSVUUpCgoKI3N2Z2xpdGUoZmlsZW5hbWUgPSBwYXN0ZTAoaW1hZ2VfZGlyLCJmaWc3X2Uuc3ZnIiksd2lkdGg9MjQsaGVpZ2h0PTgpCmdyaWQuYXJyYW5nZShWbW4ycjFbWzRdXSwgVm1uMnIzW1s0XV0sIFZtbjJyN1tbNF1dLCBuY29sID0gMywgd2lkdGhzPWMoMSwxLDEuMTQpKQojaW52aXNpYmxlKGRldi5vZmYoKSkKCmBgYAoKIyMjIFZtbjJyOCAtIFZtbjJyNzMgLSBWbW4ycjg4ICAKCmBgYHtyLGZpZy53aWR0aD0xNixmaWcuaGVpZ2h0PTUuMzMzMzN9CgpWbW4ycjggPC0gcGhlYXRtYXAoZmlsdGVyZWQudm5vLm1hdC5saXN0JFZtbjJyOCwgZm9udHNpemUgPSAxNiwgY2x1c3Rlcl9jb2xzID0gRkFMU0UsIAogICAgICAgICAgICAgICAgICAgICBjbHVzdGVyX3Jvd3MgPSBGQUxTRSwgbWFpbj0iVm1uMnI4Iiwgc2hvd19yb3duYW1lcyA9IEZBTFNFLCBzaWxlbnQ9VFJVRSkKVm1uMnI3MyA8LSBwaGVhdG1hcChmaWx0ZXJlZC52bm8ubWF0Lmxpc3QkVm1uMnI3MywgZm9udHNpemUgPSAxNiwgY2x1c3Rlcl9jb2xzID0gRkFMU0UsIAogICAgICAgICAgICAgICAgICAgIGNsdXN0ZXJfcm93cyA9IEZBTFNFLCBtYWluPSJWbW4ycjczIiwgc2hvd19yb3duYW1lcyA9IEZBTFNFLCBzaWxlbnQ9VFJVRSkKVm1uMnI4OCA8LSBwaGVhdG1hcChmaWx0ZXJlZC52bm8ubWF0Lmxpc3QkVm1uMnI4OCwgZm9udHNpemUgPSAxNiwgY2x1c3Rlcl9jb2xzID0gRkFMU0UsIAogICAgICAgICAgICAgICAgICAgIGNsdXN0ZXJfcm93cyA9IEZBTFNFLCBtYWluPSJWbW4ycjg4Iiwgc2lsZW50PVRSVUUpCgoKI3N2Z2xpdGUoZmlsZW5hbWUgPSBwYXN0ZTAoaW1hZ2VfZGlyLCJmaWc3X2Yuc3ZnIiksd2lkdGg9MjQsaGVpZ2h0PTgpCmdyaWQuYXJyYW5nZShWbW4ycjhbWzRdXSwgVm1uMnI3M1tbNF1dLCBWbW4ycjg4W1s0XV0sIG5jb2wgPSAzLCB3aWR0aHM9YygxLDEsMS4xNCkpCiNpbnZpc2libGUoZGV2Lm9mZigpKQoKYGBgCgojIyMgVm1uMnI5MSAtIFZtbjJyMTE4ICAKCmBgYHtyLGZpZy53aWR0aD0xMC42NjY2NixmaWcuaGVpZ2h0PTUuMzMzMzN9CgpWbW4ycjkxIDwtIHBoZWF0bWFwKGZpbHRlcmVkLnZuby5tYXQubGlzdCRWbW4ycjkxLCBmb250c2l6ZSA9IDE2LCBjbHVzdGVyX2NvbHMgPSBGQUxTRSwgCiAgICAgICAgICAgICAgICAgICAgIGNsdXN0ZXJfcm93cyA9IEZBTFNFLCBtYWluPSJWbW4ycjkxIiwgc2hvd19yb3duYW1lcyA9IEZBTFNFLCBzaWxlbnQ9VFJVRSkKVm1uMnIxMTggPC0gcGhlYXRtYXAoZmlsdGVyZWQudm5vLm1hdC5saXN0JFZtbjJyMTE4LCBmb250c2l6ZSA9IDE2LCBjbHVzdGVyX2NvbHMgPSBGQUxTRSwgCiAgICAgICAgICAgICAgICAgICAgY2x1c3Rlcl9yb3dzID0gRkFMU0UsIG1haW49IlZtbjJyMTE4Iiwgc2lsZW50PVRSVUUpCgojc3ZnbGl0ZShmaWxlbmFtZSA9IHBhc3RlMChpbWFnZV9kaXIsImZpZzdfZy5zdmciKSx3aWR0aD0xNixoZWlnaHQ9OCkKZ3JpZC5hcnJhbmdlKFZtbjJyOTFbWzRdXSwgVm1uMnIxMThbWzRdXSwgbmNvbCA9IDIsIHdpZHRocz1jKDEsMS4xNCkpCiNpbnZpc2libGUoZGV2Lm9mZigpKQoKYGBgCgo=